/* 
 * File:   ClustalWSample.h
 * Author: loskana
 *
 * Created on March 7, 2011, 11:52 PM
 */

#ifndef CLUSTALWSAMPLE_H
#define	CLUSTALWSAMPLE_H

#include <vector>
#include <string>

#include "Align.h"
#include "ScoringM2M.h"
#include "SequenceData.h"
#include "NWAlign.h"
#include "AGPFunction.h"

#include "NewickTree.h"

namespace Biopool
{

class ClustalWSample {

    public:
		/// Constructor of the class.
        ClustalWSample(std::string, std::vector<std::string>);
        ClustalWSample(const ClustalWSample& orig);
        virtual ~ClustalWSample();

        std::vector<std::string> execute();

    private:

        std::vector<std::string>* recursiveMultipleAlignment(NewickTree::Node *);

        NewickTree * evolTree;
        std::vector<std::string> sequences;
        
		// Align parameters
        int alignGapPenalty;
        int alignGapExtension;
        
        // Align classes
		SubMatrix*     subMatrix;
        SequenceData*  sequenceData;
        GapFunction*   gapFunction;
        ScoringScheme* scoringScheme;
        Align*         align;
};

} /* namespace */

#endif	/* CLUSTALWSAMPLE_H */
